<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>使用命名规则保护属性</title>
</head>
<body>
    
</body>
<script>
    //   在很多时候 定义的一些类  类内部的属性值我们不希望再外部随便的被修改
        // 这时候我们可以使用命名规范来保护
    
    class site{
        constructor(url){
            this.url = url
        }
    }
    let hd = new site('www.baidu.com')
    console.log(hd.url)  //www.baidu.com

    hd.url = 'jimmy.com'
    console.log(hd.url)  // jimmy.com
    // 很明显 我们不希望外部可以这么轻松的就修改了我们的设置好的属性值 
    // 这时候我们可以使用程序员之间公认的命名规则来处理这种情况


    /*
        这种就是一个程序员之间都会遵守的一个定理 
            遇到_url这类的有_的类中的属性  我们都不会取直接修改他  一般是会再定义一个访问器来修改
    */
    class website{
        _url = ''
        constructor(url){
            this._url = url
        }
        set url(value){
            if(/^https?/i.test(value)){
                this._url = value
            }else{
                throw new Error('格式错误')
            }
        }
        get url(){
            return this._url
        }
    }
    let jimmy = new website('https://www.jimmy.com')
    // jimmy.url = 'heheheh'
    console.log(jimmy.url)
</script>
</html>